home *** CD-ROM | disk | FTP | other *** search
- package java.net;
-
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.NoSuchElementException;
- import java.util.StringTokenizer;
- import java.util.TimeZone;
-
- public final class HttpCookie implements Cloneable {
- private String name;
- private String value;
- private String comment;
- private String commentURL;
- private boolean toDiscard;
- private String domain;
- private long maxAge = -1L;
- private String path;
- private String portlist;
- private boolean secure;
- private int version = 1;
- private long whenCreated = 0L;
- private static final long MAX_AGE_UNSPECIFIED = -1L;
- private static final String NETSCAPE_COOKIE_DATE_FORMAT = "EEE',' dd-MMM-yyyy HH:mm:ss 'GMT'";
- private static final String SET_COOKIE = "set-cookie:";
- private static final String SET_COOKIE2 = "set-cookie2:";
- private static final String tspecials = ",;";
- static Map<String, CookieAttributeAssignor> assignors = null;
-
- public HttpCookie(String var1, String var2) {
- var1 = var1.trim();
- if (var1.length() != 0 && isToken(var1) && !isReserved(var1)) {
- this.name = var1;
- this.value = var2;
- this.toDiscard = false;
- this.secure = false;
- this.whenCreated = System.currentTimeMillis();
- } else {
- throw new IllegalArgumentException("Illegal cookie name");
- }
- }
-
- public static List<HttpCookie> parse(String var0) {
- int var1 = guessCookieVersion(var0);
- if (startsWithIgnoreCase(var0, "set-cookie2:")) {
- var0 = var0.substring("set-cookie2:".length());
- } else if (startsWithIgnoreCase(var0, "set-cookie:")) {
- var0 = var0.substring("set-cookie:".length());
- }
-
- ArrayList var2 = new ArrayList();
- if (var1 == 0) {
- HttpCookie var3 = parseInternal(var0);
- var3.setVersion(0);
- var2.add(var3);
- } else {
- for(String var5 : splitMultiCookies(var0)) {
- HttpCookie var6 = parseInternal(var5);
- var6.setVersion(1);
- var2.add(var6);
- }
- }
-
- return var2;
- }
-
- public boolean hasExpired() {
- if (this.maxAge == 0L) {
- return true;
- } else if (this.maxAge == -1L) {
- return false;
- } else {
- long var1 = (System.currentTimeMillis() - this.whenCreated) / 1000L;
- return var1 > this.maxAge;
- }
- }
-
- public void setComment(String var1) {
- this.comment = var1;
- }
-
- public String getComment() {
- return this.comment;
- }
-
- public void setCommentURL(String var1) {
- this.commentURL = var1;
- }
-
- public String getCommentURL() {
- return this.commentURL;
- }
-
- public void setDiscard(boolean var1) {
- this.toDiscard = var1;
- }
-
- public boolean getDiscard() {
- return this.toDiscard;
- }
-
- public void setPortlist(String var1) {
- this.portlist = var1;
- }
-
- public String getPortlist() {
- return this.portlist;
- }
-
- public void setDomain(String var1) {
- if (var1 != null) {
- this.domain = var1.toLowerCase();
- } else {
- this.domain = var1;
- }
-
- }
-
- public String getDomain() {
- return this.domain;
- }
-
- public void setMaxAge(long var1) {
- this.maxAge = var1;
- }
-
- public long getMaxAge() {
- return this.maxAge;
- }
-
- public void setPath(String var1) {
- this.path = var1;
- }
-
- public String getPath() {
- return this.path;
- }
-
- public void setSecure(boolean var1) {
- this.secure = var1;
- }
-
- public boolean getSecure() {
- return this.secure;
- }
-
- public String getName() {
- return this.name;
- }
-
- public void setValue(String var1) {
- this.value = var1;
- }
-
- public String getValue() {
- return this.value;
- }
-
- public int getVersion() {
- return this.version;
- }
-
- public void setVersion(int var1) {
- if (var1 != 0 && var1 != 1) {
- throw new IllegalArgumentException("cookie version should be 0 or 1");
- } else {
- this.version = var1;
- }
- }
-
- public static boolean domainMatches(String var0, String var1) {
- if (var0 != null && var1 != null) {
- boolean var2 = ".local".equalsIgnoreCase(var0);
- int var3 = var0.indexOf(46);
- if (var3 == 0) {
- var3 = var0.indexOf(46, 1);
- }
-
- if (var2 || var3 != -1 && var3 != var0.length() - 1) {
- int var4 = var1.indexOf(46);
- if (var4 == -1 && var2) {
- return true;
- } else {
- int var5 = var0.length();
- int var6 = var1.length() - var5;
- if (var6 == 0) {
- return var1.equalsIgnoreCase(var0);
- } else if (var6 > 0) {
- String var7 = var1.substring(0, var6);
- String var8 = var1.substring(var6);
- return var7.indexOf(46) == -1 && var8.equalsIgnoreCase(var0);
- } else if (var6 != -1) {
- return false;
- } else {
- return var0.charAt(0) == '.' && var1.equalsIgnoreCase(var0.substring(1));
- }
- }
- } else {
- return false;
- }
- } else {
- return false;
- }
- }
-
- public String toString() {
- return this.getVersion() > 0 ? this.toRFC2965HeaderString() : this.toNetscapeHeaderString();
- }
-
- public boolean equals(Object var1) {
- if (var1 == this) {
- return true;
- } else if (!(var1 instanceof HttpCookie)) {
- return false;
- } else {
- HttpCookie var2 = (HttpCookie)var1;
- return equalsIgnoreCase(this.getName(), var2.getName()) && equalsIgnoreCase(this.getDomain(), var2.getDomain()) && equals(this.getPath(), var2.getPath());
- }
- }
-
- public int hashCode() {
- int var1 = this.name.toLowerCase().hashCode();
- int var2 = this.domain != null ? this.domain.toLowerCase().hashCode() : 0;
- int var3 = this.path != null ? this.path.hashCode() : 0;
- return var1 + var2 + var3;
- }
-
- public Object clone() {
- try {
- return super.clone();
- } catch (CloneNotSupportedException var2) {
- throw new RuntimeException(var2.getMessage());
- }
- }
-
- private static boolean isToken(String var0) {
- int var1 = var0.length();
-
- for(int var2 = 0; var2 < var1; ++var2) {
- char var3 = var0.charAt(var2);
- if (var3 < ' ' || var3 >= 127 || ",;".indexOf(var3) != -1) {
- return false;
- }
- }
-
- return true;
- }
-
- private static boolean isReserved(String var0) {
- return var0.equalsIgnoreCase("Comment") || var0.equalsIgnoreCase("CommentURL") || var0.equalsIgnoreCase("Discard") || var0.equalsIgnoreCase("Domain") || var0.equalsIgnoreCase("Expires") || var0.equalsIgnoreCase("Max-Age") || var0.equalsIgnoreCase("Path") || var0.equalsIgnoreCase("Port") || var0.equalsIgnoreCase("Secure") || var0.equalsIgnoreCase("Version") || var0.charAt(0) == '$';
- }
-
- private static HttpCookie parseInternal(String var0) {
- HttpCookie var1 = null;
- Object var2 = null;
- StringTokenizer var3 = new StringTokenizer(var0, ";");
-
- try {
- String var9 = var3.nextToken();
- int var4 = var9.indexOf(61);
- if (var4 == -1) {
- throw new IllegalArgumentException("Invalid cookie name-value pair");
- }
-
- String var5 = var9.substring(0, var4).trim();
- String var6 = var9.substring(var4 + 1).trim();
- var1 = new HttpCookie(var5, stripOffSurroundingQuote(var6));
- } catch (NoSuchElementException var7) {
- throw new IllegalArgumentException("Empty cookie header string");
- }
-
- String var12;
- String var13;
- for(; var3.hasMoreTokens(); assignAttribute(var1, var12, var13)) {
- String var10 = var3.nextToken();
- int var11 = var10.indexOf(61);
- if (var11 != -1) {
- var12 = var10.substring(0, var11).trim();
- var13 = var10.substring(var11 + 1).trim();
- } else {
- var12 = var10.trim();
- var13 = null;
- }
- }
-
- return var1;
- }
-
- private static void assignAttribute(HttpCookie var0, String var1, String var2) {
- var2 = stripOffSurroundingQuote(var2);
- CookieAttributeAssignor var3 = (CookieAttributeAssignor)assignors.get(var1.toLowerCase());
- if (var3 != null) {
- var3.assign(var0, var1, var2);
- } else {
- throw new IllegalArgumentException("Illegal cookie attribute");
- }
- }
-
- private String toNetscapeHeaderString() {
- StringBuilder var1 = new StringBuilder();
- var1.append(this.getName() + "=" + this.getValue());
- return var1.toString();
- }
-
- private String toRFC2965HeaderString() {
- StringBuilder var1 = new StringBuilder();
- var1.append(this.getName()).append("=\"").append(this.getValue()).append('"');
- if (this.getPath() != null) {
- var1.append(";$Path=\"").append(this.getPath()).append('"');
- }
-
- if (this.getDomain() != null) {
- var1.append(";$Domain=\"").append(this.getDomain()).append('"');
- }
-
- if (this.getPortlist() != null) {
- var1.append(";$Port=\"").append(this.getPortlist()).append('"');
- }
-
- return var1.toString();
- }
-
- private long expiryDate2DeltaSeconds(String var1) {
- SimpleDateFormat var2 = new SimpleDateFormat("EEE',' dd-MMM-yyyy HH:mm:ss 'GMT'");
- var2.setTimeZone(TimeZone.getTimeZone("GMT"));
-
- try {
- Date var3 = var2.parse(var1);
- return (var3.getTime() - this.whenCreated) / 1000L;
- } catch (Exception var4) {
- return 0L;
- }
- }
-
- private static int guessCookieVersion(String var0) {
- byte var1 = 0;
- var0 = var0.toLowerCase();
- if (var0.indexOf("expires=") != -1) {
- var1 = 0;
- } else if (var0.indexOf("version=") != -1) {
- var1 = 1;
- } else if (var0.indexOf("max-age") != -1) {
- var1 = 1;
- } else if (startsWithIgnoreCase(var0, "set-cookie2:")) {
- var1 = 1;
- }
-
- return var1;
- }
-
- private static String stripOffSurroundingQuote(String var0) {
- return var0 != null && var0.length() > 0 && var0.charAt(0) == '"' && var0.charAt(var0.length() - 1) == '"' ? var0.substring(1, var0.length() - 1) : var0;
- }
-
- private static boolean equalsIgnoreCase(String var0, String var1) {
- if (var0 == var1) {
- return true;
- } else {
- return var0 != null && var1 != null ? var0.equalsIgnoreCase(var1) : false;
- }
- }
-
- private static boolean equals(String var0, String var1) {
- if (var0 == var1) {
- return true;
- } else {
- return var0 != null && var1 != null ? var0.equals(var1) : false;
- }
- }
-
- private static boolean startsWithIgnoreCase(String var0, String var1) {
- if (var0 != null && var1 != null) {
- return var0.length() >= var1.length() && var1.equalsIgnoreCase(var0.substring(0, var1.length()));
- } else {
- return false;
- }
- }
-
- private static List<String> splitMultiCookies(String var0) {
- ArrayList var1 = new ArrayList();
- int var2 = 0;
- int var3 = 0;
-
- int var4;
- for(var4 = 0; var3 < var0.length(); ++var3) {
- char var5 = var0.charAt(var3);
- if (var5 == '"') {
- ++var2;
- }
-
- if (var5 == ',' && var2 % 2 == 0) {
- var1.add(var0.substring(var4, var3));
- var4 = var3 + 1;
- }
- }
-
- var1.add(var0.substring(var4));
- return var1;
- }
-
- // $FF: synthetic method
- static long access$000(HttpCookie var0, String var1) {
- return var0.expiryDate2DeltaSeconds(var1);
- }
-
- static {
- assignors = new HashMap();
- assignors.put("comment", new 1());
- assignors.put("commenturl", new 2());
- assignors.put("discard", new 3());
- assignors.put("domain", new 4());
- assignors.put("max-age", new 5());
- assignors.put("path", new 6());
- assignors.put("port", new 7());
- assignors.put("secure", new 8());
- assignors.put("version", new 9());
- assignors.put("expires", new 10());
- }
- }
-